﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Linq;

namespace QldtSdh.GUI.DuLieu
{
    using BLL;
    using DAL;
    using DAL.Models;
    using QldtSdh.Utils;
    using QldtSdh.GUI.Utils;
    using CEMS_DHKH.Models;

    public partial class FormImportGiangVienDaiHoc : QldtSdh.GUI.Common.BaseDialog
    {
        private bool _DoNotUpdateGuiBySelectedDonVi = false;
        private DonVi _DonVi;
        public int SoLuongImport { get; private set; }
        public int SoLuongCapNhat { get; private set; }

        public FormImportGiangVienDaiHoc(DonVi donVi)
        {
            InitializeComponent();

            gridGiangVienDaoTaoDaiHoc.SetDataGridViewAsReadonly(rowHeadersVisible: true, columnHeadersVisible: true);
            gridGiangVienDaoTaoDaiHoc.AddRowIndexing();

            _DonVi = donVi;
            lblHeader.Text = string.Format("Chọn danh sách giảng viên từ cơ sở dữ liệu đào tạo muốn đồng bộ với đơn vị {0}", donVi.TenDonVi);
            SoLuongImport = 0;
            SoLuongCapNhat = 0;
        }

        private void UpdateGuiBySelectedDonVi()
        {
            DonViDaoTaoDaiHoc donViDaoTaoDaiHoc = null;
            if (bsDonVi.Current != null)
                donViDaoTaoDaiHoc = bsDonVi.Current as DonViDaoTaoDaiHoc;
            if (donViDaoTaoDaiHoc == null)
            {
                bsGiangVien.DataSource = null;
            }
            else
            {
                bsGiangVien.DataSource = BizDaoTaoDaiHoc.GetListGiangVienDaoTaoDaiHoc(donViDaoTaoDaiHoc.MaDonVi);
            }

            gridGiangVienDaoTaoDaiHoc.SetDataSource(bsGiangVien);
            btnDongY.Enabled = bsGiangVien.Count > 0;
        }

        private void bsDonVi_CurrentChanged(object sender, EventArgs e)
        {
            if (_DoNotUpdateGuiBySelectedDonVi)
                return;
            UpdateGuiBySelectedDonVi();
        }

        private void btnDongY_Click(object sender, EventArgs e)
        {
            var frm = new QldtSdh.GUI.Common.FormProgress();
            frm.DoWork += (oSender, oE) =>
            {
                var lstGiangVienDaoTaoDaiHoc = bsGiangVien.DataSource as List<GiangVienDaoTaoDaiHoc>;
                var lstGiangVien = BizGiangVien.GetList(_DonVi.MaDonViGUID);

                #region Cập nhật mã giảng viên cho GV SĐH
                foreach (var y in lstGiangVien)
                {
                    var hoTenY = (y.HoDem + " " + y.Ten).ToUpper();
                    var maGiangVienDaoTaoDaiHoc = y.MaGiangVienDaoTaoDaiHoc;
                    foreach (var x in lstGiangVienDaoTaoDaiHoc)
                        if ((x.HoDem + " " + x.Ten).ToUpper().Equals(hoTenY))
                        {
                            if (x.MaGiangVien.Equals(maGiangVienDaoTaoDaiHoc) == false)
                            {
                                y.MaGiangVienDaoTaoDaiHoc = x.MaGiangVien;
                                BizGiangVien.Update(y);
                                SoLuongCapNhat++;
                                break;
                            }
                        }
                }
                #endregion

                #region Bổ sung các giảng viên ĐH
                foreach (var x in lstGiangVienDaoTaoDaiHoc)
                {
                    var chuaCoX = true;
                    var hoTenX = (x.HoDem + " " + x.Ten).ToUpper();
                    foreach (var y in lstGiangVien)
                        if ((y.HoDem + " " + y.Ten).ToUpper().Equals(hoTenX))
                        {
                            chuaCoX = false;
                            break;
                        }
                    if (chuaCoX)
                    {
                        // Bổ sung giảng viên đào tạo đại học x vào đơn vị y
                        var giangVien = new GiangVien()
                        {
                            MaGiangVien = BizGiangVien.GenerateIDGiangVien("DHT", _DonVi.MaDonVi),
                            MaGiangVienDaoTaoDaiHoc = x.MaGiangVien,
                            HoDem = x.HoDem,
                            Ten = x.Ten,
                            GioiTinh = x.GioiTinh,
                            HocHam = x.HocHam,
                            HocVi = x.HocVi,
                            MaDonVi = _DonVi.MaDonViGUID
                        };
                        BizGiangVien.Add(giangVien);
                        SoLuongImport++;
                    }
                }
                #endregion

                oE.Result = string.Format("Đã hoàn tất quá trình đồng bộ dữ liệu.\n   - Số giảng viên được cập nhật: {0}.\n   - Số giảng viên được thêm mới: {1}.",
                    SoLuongCapNhat, SoLuongImport);
            };
            frm.RunWorkerCompleted += (oSender, oE) =>
            {
                if (oE.Error != null)
                {
                    DialogUtils.ShowErrorWithDefaultTitle("Xuất hiện lỗi trong quá trình đồng bộ dữ liệu.\nChi tiết lỗi: " + oE.Error);
                }
                else
                    DialogUtils.ShowMessage(oE.Result.ToString());
            };
            frm.StartWorking(this);
        }

        private void FormImportGiangVienDaiHoc_Shown(object sender, EventArgs e)
        {
        }

        public void NapDanhSachDonVi(Form parentForm)
        {
            var frm = new QldtSdh.GUI.Common.FormProgress();
            List<DonViDaoTaoDaiHoc> lst = null;

            frm.DoWork += (oSender, oE) =>
            {
                lst = BizDaoTaoDaiHoc.GetListDonViDaoTaoDaiHoc();
                //System.Threading.Thread.Sleep(15000);
            };
            frm.RunWorkerCompleted += (oSender, oE) =>
            {
                if (oE.Error != null)
                {
                    bsDonVi.DataSource = null;
                    DialogUtils.ShowErrorWithDefaultTitle(oE.Error.Message);
                }
                else
                {
                    bsDonVi.DataSource = lst;
                }

                _DoNotUpdateGuiBySelectedDonVi = true;
                cbxDonViPhuTrach.DisplayMember = "TenDonVi";
                cbxDonViPhuTrach.DataSource = bsDonVi;
                _DoNotUpdateGuiBySelectedDonVi = false;

                UpdateGuiBySelectedDonVi();
            };
            frm.StartWorking(parentForm);
        }
    }
}
